{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.0 0.0\n"
     ]
    }
   ],
   "source": [
    "import sys\n",
    "sys.path.append('../')\n",
    "from TMM_functions import PQ_matrices as pq\n",
    "from TMM_functions import scatter_matrices as sm\n",
    "from TMM_functions import redheffer_star as rs\n",
    "from TMM_functions import generate_initial_conditions as ic\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from numpy.linalg import cond\n",
    "import cmath;\n",
    "from scipy import linalg as LA\n",
    "from numpy.linalg import solve as bslash\n",
    "import time\n",
    "from convolution_matrices.convmat1D import *\n",
    "# from RCWA_1D_functions.grating_fft.grating_conv import *\n",
    "\n",
    "# Moharam et. al Formulation for stable and efficient implementation for RCWA\n",
    "plt.close(\"all\")\n",
    "'''\n",
    "'''\n",
    "L0 = 1e-6;\n",
    "e0 = 8.854e-12;\n",
    "mu0 = 4*np.pi*1e-8;\n",
    "\n",
    "n_ridge = 3.48;              # ridge\n",
    "n_groove = 3.48;                # groove (unit-less)\n",
    "lattice_constant = 0.7;  # SI units\n",
    "\n",
    "## simulation parameters\n",
    "theta = (0)*np.pi/180;\n",
    "phi = (0)*np.pi/180;\n",
    "e_r = 1;\n",
    "m_r = 1;\n",
    "e_t = 1;\n",
    "m_t = 1;\n",
    "n_i = np.sqrt(e_r);\n",
    "\n",
    "normal_vector= [0,0,-1]\n",
    "e_r = 12; m_r = 1;\n",
    "exy = 14; eyx = 14;\n",
    "I = np.matrix(np.eye(2))\n",
    "\n",
    "## specify the initial kx and ky\n",
    "k0=1\n",
    "kx = k0 *np.sin(theta)*np.cos(phi);\n",
    "ky = k0 *np.sin(theta)*np.sin(phi);\n",
    "print(kx, ky)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "## redefined functions \n",
    "def Pa(kx, ky, e_r, m_r, exy, eyx):\n",
    "        return (1/e_r)*np.matrix([[kx * ky - exy,  m_r * e_r - kx ** 2],\n",
    "                                  [ky ** 2 - m_r * e_r,  -kx * ky -exy]]);\n",
    "\n",
    "def Qa(kx, ky, e_r, m_r):\n",
    "        Q = (1/m_r)*np.matrix([[kx * ky, (m_r * e_r) - kx ** 2],\n",
    "                               [ky ** 2 - (m_r * e_r), -kx * ky]]);\n",
    "        return Q;\n",
    "\n",
    "def Pa_Qa_kz(kx, ky, e_r, mu_r, exy, eyx):\n",
    "    '''\n",
    "    r is for relative so do not put epsilon_0 or mu_0 here\n",
    "    :param kx:\n",
    "    :param ky:\n",
    "    :param e_r:\n",
    "    :param mu_r:\n",
    "    :return:\n",
    "    '''\n",
    "    # eigensolution required in xy anisotropic medium, yea because the k-axes are now different.\n",
    "    kz = np.sqrt(mu_r * e_r - kx ** 2 - ky ** 2);\n",
    "    q = Qa(kx, ky, e_r, mu_r)\n",
    "    p = Pa(kx, ky, e_r, mu_r, exy, eyx)\n",
    "\n",
    "    return p, q, kz;    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Troubleshooting and Observations\n",
    "In the isotropic case, the E modes can be assumed to be the identity matrix because PQ in that case would actually come out to be the identity matrix.\n",
    "\n",
    "\\begin{equation}\n",
    "\\frac{1}{\\mu \\epsilon}\n",
    "\\begin{bmatrix}\n",
    "    k_x k_y & \\mu \\epsilon - k_x^2 \\\\\n",
    "    k_y^2 - \\mu\\epsilon & -k_x k_y\n",
    "\\end{bmatrix} \\begin{bmatrix}\n",
    "    k_x k_y & \\mu \\epsilon - k_x^2 \\\\\n",
    "    k_y^2 - \\mu\\epsilon & -k_x k_y\n",
    "\\end{bmatrix} = \\begin{bmatrix}\n",
    "    (-k_x^2 -k_y^2) - \\mu \\epsilon & 0 \\\\\n",
    "    0 & (-k_x^2 -k_y^2) - \\mu \\epsilon \n",
    "\\end{bmatrix}\n",
    "\\end{equation}\n",
    "\n",
    "In the anisotropic case, it is quite clear that the P and Q matrices do not have symmetry with resepct to each other anymore.\n",
    "\\begin{equation}\n",
    "\\frac{1}{\\mu \\epsilon}\n",
    "\\begin{bmatrix}\n",
    "    k_x k_y - e_{xy} & \\mu \\epsilon - k_x^2 \\\\\n",
    "    k_y^2 - \\mu\\epsilon & -k_x k_y + e_{xy}\n",
    "\\end{bmatrix} \\begin{bmatrix}\n",
    "    k_x k_y & \\mu \\epsilon - k_x^2 \\\\\n",
    "    k_y^2 - \\mu\\epsilon & -k_x k_y\n",
    "\\end{bmatrix} = \\begin{bmatrix}\n",
    "    (-k_x^2 -k_y^2) - \\mu \\epsilon & 0 \\\\\n",
    "    0 & (-k_x^2 -k_y^2) - \\mu \\epsilon \n",
    "\\end{bmatrix}\n",
    "\\end{equation}\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "ref = [];\n",
    "trans = [];\n",
    "I = np.matrix(np.eye(2, 2));  # unit 2x2 matrix\n",
    "wavelengths = np.linspace(0.5, 2, 100)\n",
    "[e_r, m_r] = [1,1];\n",
    "[e_t, m_t] = [1,1];\n",
    "ER = [12];\n",
    "UR = [1]\n",
    "layer_thicknesses = [0.5]\n",
    "n_i = np.sqrt(e_r*m_r);\n",
    "kx = n_i * np.sin(theta) * np.cos(phi);  # constant in ALL LAYERS; kx = 0 for normal incidence\n",
    "ky = n_i * np.sin(theta) * np.sin(phi);  # constant in ALL LAYERS; ky = 0 for normal incidence\n",
    "normal_vector = np.array([0, 0, -1])  # positive z points down;\n",
    "ate_vector = np.matrix([0, 1, 0]);  # vector for the out of plane E-field\n",
    "\n",
    "## =================  specify gap media ========================##\n",
    "e_h = 1; m_h = 1;\n",
    "Pg, Qg, kzg = pq.P_Q_kz(kx, ky, e_h, m_h)\n",
    "Wg = I;  # Wg should be the eigenmodes of the E field, which paparently is the identity, yes for a homogeneous medium\n",
    "sqrt_lambda = cmath.sqrt(-1) * Wg;\n",
    "# remember Vg is really Qg*(Omg)^-1; Vg is the eigenmodes of the H fields\n",
    "Vg = Qg * Wg * (sqrt_lambda) ** -1;\n",
    "\n",
    "## ========================================== ##\n",
    "\n",
    "[pte, ptm] = [1,0];\n",
    "\n",
    "for i in range(len(wavelengths)):  # in SI units\n",
    "    ## initialize global scattering matrix: should be a 4x4 identity so when we start the redheffer star, we get I*SR\n",
    "\n",
    "    Sg11 = np.matrix(np.zeros((2, 2)));\n",
    "    Sg12 = np.matrix(np.eye(2, 2));\n",
    "    Sg21 = np.matrix(np.eye(2, 2));\n",
    "    Sg22 = np.matrix(np.zeros((2, 2)));  # matrices\n",
    "    Sg = np.block(\n",
    "        [[Sg11, Sg12], [Sg21, Sg22]]);  # initialization is equivelant as that for S_reflection side matrix\n",
    "\n",
    "    ### ================= Working on the Reflection Side =========== ##\n",
    "    Pr, Qr, kzr = pq.P_Q_kz(kx, ky, e_r, m_r)\n",
    "\n",
    "    ## ============== values to keep track of =======================##\n",
    "    S_matrices = list();\n",
    "    kz_storage = [kzr];\n",
    "    X_storage = list();\n",
    "    ## ==============================================================##\n",
    "\n",
    "    # define vacuum wavevector k0\n",
    "    lam0 = wavelengths[i];  # k0 and lam0 are related by 2*pi/lam0 = k0\n",
    "    k0 = 2*np.pi/lam0;\n",
    "    ## modes of the layer\n",
    "    Om_r = np.matrix(cmath.sqrt(-1) * kzr * I);\n",
    "    X_storage.append(Om_r);\n",
    "    W_ref = I;\n",
    "    V_ref = Qr * Om_r.I;  # can't play games with V like with W because matrices for V are complex\n",
    "\n",
    "    ## calculating A and B matrices for scattering matrix\n",
    "    Ar, Br = sm.A_B_matrices(Wg, W_ref, Vg, V_ref);\n",
    "\n",
    "    S_ref, Sr_dict = sm.S_R(Ar, Br);  # scatter matrix for the reflection region\n",
    "    S_matrices.append(S_ref);\n",
    "    Sg, D_r, F_r = rs.RedhefferStar(Sg, S_ref);\n",
    "\n",
    "    ## go through the (ANISOTROPIC) layers\n",
    "    for i in range(len(ER)):\n",
    "        # ith layer material parameters\n",
    "        e = ER[i];\n",
    "        m = UR[i];\n",
    "        \n",
    "        # longitudinal k_vector\n",
    "        P, Q, kzl = Pa_Qa_kz(kx, ky, e, m, exy, eyx)\n",
    "\n",
    "        ## E-field modes that can propagate in the medium\n",
    "        W_i = I; #should not be identity for xy anisotorpy\n",
    "        ## corresponding H-field modes.\n",
    "        Om = cmath.sqrt(-1) * kzl * I;\n",
    "        X_storage.append(Om)\n",
    "        V_i = Q * np.linalg.inv(Om);\n",
    "\n",
    "        # now defIne A and B\n",
    "        A, B = sm.A_B_matrices(Wg, W_i, Vg, V_i);\n",
    "\n",
    "        # calculate scattering matrix\n",
    "        S_layer, Sl_dict = sm.S_layer(A, B, layer_thicknesses[i], k0, Om)\n",
    "        S_matrices.append(S_layer);\n",
    "\n",
    "        ## update global scattering matrix using redheffer star\n",
    "        Sg, D_i, F_i = rs.RedhefferStar(Sg, S_layer);\n",
    "\n",
    "    ##========= Working on the Transmission Side==============##\n",
    "    Pt, Qt, kz_trans = pq.P_Q_kz(kx, ky, e_t, m_t);\n",
    "    kz_storage.append(kz_trans);\n",
    "\n",
    "    Om = cmath.sqrt(-1) * kz_trans * I;\n",
    "    Vt = Qt * np.linalg.inv(Om);\n",
    "\n",
    "    # get At, Bt\n",
    "    At, Bt = sm.A_B_matrices(Wg, I, Vg, Vt)\n",
    "\n",
    "    ST, ST_dict = sm.S_T(At, Bt)\n",
    "    S_matrices.append(ST);\n",
    "    # update global scattering matrix\n",
    "    Sg, D_t, F_t = rs.RedhefferStar(Sg, ST);\n",
    "\n",
    "    K_inc_vector = n_i * k0 * np.matrix([np.sin(theta) * np.cos(phi), \\\n",
    "                                         np.sin(theta) * np.sin(phi), np.cos(theta)]);\n",
    "\n",
    "    # cinc is the c1+\n",
    "    E_inc, cinc, Polarization = ic.initial_conditions(K_inc_vector, theta, normal_vector, pte, ptm)\n",
    "\n",
    "    ## COMPUTE FIELDS\n",
    "    Er = Sg[0:2, 0:2] * cinc;  # S11; #(cinc = initial mode amplitudes), cout = Sg*cinc; #2d because Ex, Ey...\n",
    "    Et = Sg[2:, 0:2] * cinc;  # S21\n",
    "\n",
    "    Er = np.squeeze(np.asarray(Er));\n",
    "    Et = np.squeeze(np.asarray(Et));\n",
    "\n",
    "    Erx = Er[0];\n",
    "    Ery = Er[1];\n",
    "    Etx = Et[0];\n",
    "    Ety = Et[1];\n",
    "\n",
    "    # apply the grad(E) = 0 equation to get z components\n",
    "    Erz = -(kx * Erx + ky * Ery) / kzr;\n",
    "    Etz = -(kx * Etx + ky * Ety) / kz_trans;  ## using divergence of E equation here\n",
    "\n",
    "    # add in the Erz component to vectors\n",
    "    Er = np.matrix([Erx, Ery, Erz]);  # a vector\n",
    "    Et = np.matrix([Etx, Ety, Etz]);\n",
    "\n",
    "    R = np.linalg.norm(Er) ** 2;\n",
    "    T = np.linalg.norm(Et) ** 2;\n",
    "    ref.append(R);\n",
    "    trans.append(T);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ref = np.array(ref);\n",
    "trans = np.array(trans);\n",
    "plt.plot(ref)\n",
    "plt.plot(trans)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
